// 区域数据类型定义

export interface RegionItem {
  /** 区域代码 */
  code: number;
  /** 区域名称 */
  name: string;
  /** 父级区域代码 */
  pcode: number;
  /** 级别 (1:省/直辖市, 2:市, 3:县/区) */
  level: number;
  /** 子级区域列表 */
  children: RegionItem[];
  /** 区域ID */
  id: number;
  /** 父级区域ID */
  parentId: number;
}

// 区域树列表响应类型
export interface RegionTreeResponse {
  /** 区域树数据 */
  data: RegionItem[];
  /** 响应状态码 */
  code?: number | string;
  /** 响应消息 */
  msg?: string;
  /** 是否成功 */
  success?: boolean;
}

// 区域查询参数类型
export interface RegionQueryParams {
  /** 父级区域代码 */
  parentCode?: number;
  /** 查询级别 */
  level?: number;
  /** 关键词搜索 */
  keyword?: string;
}

// 区域选择值类型
export interface RegionValue {
  /** 省代码 */
  provinceCode?: number;
  /** 市代码 */
  cityCode?: number;
  /** 县代码 */
  countyCode?: number;
  /** 完整路径代码数组 */
  codes?: number[];
  /** 完整路径名称数组 */
  names?: string[];
}

// 级联选择器属性配置
export interface RegionCascaderProps {
  /** 指定选项的值为选项对象的某个属性值 */
  value?: string;
  /** 指定选项标签为选项对象的某个属性值 */
  label?: string;
  /** 指定选项的子选项为选项对象的某个属性值 */
  children?: string;
  /** 是否禁用选项 */
  disabled?: string;
  /** 是否为叶子节点 */
  leaf?: string;
}

// 导出默认的级联选择器配置
export const defaultRegionCascaderProps: RegionCascaderProps = {
  value: 'code',
  label: 'name',
  children: 'children'
};

// 工具函数类型
export interface RegionUtils {
  /** 根据代码查找区域信息 */
  findByCode: (code: number, regions: RegionItem[]) => RegionItem | null;
  /** 根据代码路径获取完整地址 */
  getFullAddress: (codes: number[], regions: RegionItem[]) => string;
  /** 获取指定级别的区域列表 */
  getRegionsByLevel: (level: number, regions: RegionItem[]) => RegionItem[];
  /** 构建级联数据 */
  buildCascaderData: (regions: RegionItem[]) => RegionItem[];
}
